package br.edu.intec.agenda.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.edu.intec.agenda.entity.Contato;
import br.edu.intec.agenda.exception.DAOException;


public class ContatoDao extends GenericDao implements IDao<Contato>{
	
	private Connection conn;
	private PreparedStatement pstm;
	private ResultSet rs;

	@Override
	public void save(Contato contato) throws DAOException{
		
		String sql = "insert into contato (nome, telefone) values (?,?)";
		inserir(sql, contato.getNome(), contato.getTelefone());
		
	}

	@Override
	public void update(Contato contato) throws DAOException{
		String sql = "update contato set nome = ?, telefone = ? where id = ?";
		atualizar(sql, contato.getId(), contato.getNome(), contato.getTelefone());
	}

	@Override
	public void delete(Contato contato) throws DAOException{
		String sql = "delete from contato where id = ?";
		excluir(sql, contato.getId());
	}

	@Override
	public List<Contato> findAll() throws DAOException{
		
		String sql = "select * from contato";
		List<Contato> contatos = new ArrayList<Contato>();
		
		try {
			
			conn = ConnectionFactory.getConnection();
			pstm = conn.prepareStatement(sql);
			
			rs = pstm.executeQuery();
			
			while(rs.next()){
				
				Contato contato = new Contato();
				contato.setId(rs.getInt("id"));
				contato.setNome(rs.getString("nome"));
				contato.setTelefone(rs.getString("telefone"));
				
				contatos.add(contato);
			}			
			
		} catch (SQLException e) {
			throw new DAOException("Erro ao listar, tente novamente!");
		} catch (DAOException e) {
			throw new DAOException(e.getMessage());
		} finally {
			ConnectionFactory.closeConnection(conn, pstm, rs);
		}
		
		return contatos;
	}

	@Override
	public Contato findById(Integer id) throws DAOException{
		
		Contato contato = new Contato();
		String sql = "select * from contato where id = ?";
		try {
			
			conn = ConnectionFactory.getConnection();
			pstm = conn.prepareStatement(sql);
			
			pstm.setInt(1, id);
			
			rs = pstm.executeQuery();
			
			/*if (rs.getFetchSize() < 1)
				throw new DAOException("Nenhum registro foi encontrado!");*/
			
			while(rs.next()){
				contato.setId(rs.getInt("id"));
				contato.setNome(rs.getString("nome"));
				contato.setTelefone(rs.getString("telefone"));
			}
			
		} catch (SQLException e) {
			throw new DAOException("Falha ao selecionar, tente novamente!");
		} catch (DAOException e) {
			throw e;
		}
		
		return contato;
	}
	
		

}
